From 364aa90a5461050ac18eddf239ea1315d351d47f Mon Sep 17 00:00:00 2001 From: Chao Peng Date: Tue, 14 Apr 2015 15:00:44 +0200 Subject: [PATCH] x86: clean up psr boot parameter parsing Change type of opt_psr from bool to int so more psr features can fit. Introduce a new routine to parse bool parameter so that both cmt and future psr features like cat can use it. Signed-off-by: Chao Peng Reviewed-by: Andrew Cooper --- xen/arch/x86/psr.c | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index 2ef83df982..344de3cb6a 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -26,11 +26,30 @@ struct psr_assoc { }; struct psr_cmt *__read_mostly psr_cmt; -static bool_t __initdata opt_psr; +static unsigned int __initdata opt_psr; static unsigned int __initdata opt_rmid_max = 255; static uint64_t rmid_mask; static DEFINE_PER_CPU(struct psr_assoc, psr_assoc); +static void __init parse_psr_bool(char *s, char *value, char *feature, + unsigned int mask) +{ + if ( !strcmp(s, feature) ) + { + if ( !value ) + opt_psr |= mask; + else + { + int val_int = parse_bool(value); + + if ( val_int == 0 ) + opt_psr &= ~mask; + else if ( val_int == 1 ) + opt_psr |= mask; + } + } +} + static void __init parse_psr_param(char *s) { char *ss, *val_str; @@ -44,21 +63,9 @@ static void __init parse_psr_param(char *s) if ( val_str ) *val_str++ = '\0'; - if ( !strcmp(s, "cmt") ) - { - if ( !val_str ) - opt_psr |= PSR_CMT; - else - { - int val_int = parse_bool(val_str); - if ( val_int == 1 ) - opt_psr |= PSR_CMT; - else if ( val_int != 0 ) - printk("PSR: unknown cmt value: %s - CMT disabled!\n", - val_str); - } - } - else if ( val_str && !strcmp(s, "rmid_max") ) + parse_psr_bool(s, val_str, "cmt", PSR_CMT); + + if ( val_str && !strcmp(s, "rmid_max") ) opt_rmid_max = simple_strtoul(val_str, NULL, 0); s = ss + 1; -- 2.30.2